/**
 *********************************************************
 ** <h1>SFMLex - Simple and Fast Multimedia Library Extensions.</h1>
 ** SFMLex Copyright (C) 2008 Neil Johnson (neil@emailus.me.uk)
 **
 ** SFML - Simple and Fast Multimedia Library
 ** Copyright (C) 2007-2008 Laurent Gomila (laurent.gom@gmail.com)
 **
 ** This software is provided 'as-is', without any express or implied warranty.
 ** In no event will the authors be held liable for any damages arising from the use of this software.
 **
 ** Permission is granted to anyone to use this software for any purpose,
 ** including commercial applications, and to alter it and redistribute it freely,
 ** subject to the following restrictions:
 **
 ** 1. The origin of this software must not be misrepresented;
 **    you must not claim that you wrote the original software.
 **    If you use this software in a product, an acknowledgment
 **    in the product documentation would be appreciated but is not required.
 **
 ** 2. Altered source versions must be plainly marked as such,
 **    and must not be misrepresented as being the original software.
 **
 ** 3. This notice may not be removed or altered from any source distribution.
 **
 ************************************************************
 */
#ifndef SFX_C_SPRITE_RESOURCE_H
#define SFX_C_SPRITE_RESOURCE_H

#include "c_Resource.h"
#include <SFML/Graphics.hpp>

namespace sfx
{
   //
   // c_SpriteResource
   //-----------------
   class c_SpriteResource : public c_Resource
   {
   public:
      c_SpriteResource( c_ResourceMgr* ResourceMgr );
         
      virtual ~c_SpriteResource()
      {
         purge();
         std::cerr << "~c_SpriteResource()\n";
      }
      
      sf::Sprite* createSprite( void );
      bool        freeSprite( sf::Sprite* DeadSprite );

   protected:
      virtual void setImageName( const std::string& ImageName )
      {
         m_ImageName     = ImageName;
         m_ImageName_Set = true;
      }
   
      virtual void setSubRect( const std::string& SubRect );
      virtual void setFlipX( const std::string& FlipX );
      virtual void setFlipY( const std::string& FlipX );
      virtual void setPosistion( const std::string& Position );
      virtual void setCentre( const std::string& Centre );
      virtual void setRotation( const std::string& Rotation );
      virtual void setColour( const std::string& Colour ); 
      virtual void setBlendMode( const std::string& BlendMode );
      
      virtual bool cache( void )
      {
         return true;
      }

      virtual bool purge( void );
      
   protected:    
      bool                   m_ImageName_Set;
      std::string            m_ImageName;
      
      bool                   m_SubRec_Set;
      sf::IntRect            m_SubRec;
      
      bool                   m_FlipX_Set;
      bool                   m_FlipX;

      bool                   m_FlipY_Set;
      bool                   m_FlipY;
      
      bool                   m_Position_Set;
      sf::Vector2f           m_Position;

      bool                   m_Centre_Set;
      sf::Vector2f           m_Centre;
      
      bool                   m_Colour_Set;
      sf::Color              m_Colour;

      bool                   m_BlendMode_Set;
      sf::Blend::Mode        m_BlendMode;

      bool                   m_Rotation_Set;
      float                  m_Rotation;

   private:
      
      std::list<sf::Sprite*> m_Sprites;
   };

}

#endif //SFX_C_SPRITE_RESOURCE_H
